package cfengMiddleware.server.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @author Cfeng
 * @date 2022/9/13
 * 二倍均值法： 剩余人均金额的二倍作为边界E，在范围里去随机数
 * 为了更加简便，以分为单位，这样都是整数了
 */

public class RedPacketUtil {

    public static List<Integer> divideRedPackage(Integer totalAmout, Integer totalNum) {
        List<Integer> amountList = new ArrayList<>();
        //首先检验数据的合法性
        if(totalAmout > 0 && totalNum > 0) {
            //初始的剩余总数和剩余人数
            Integer restAmount = totalAmout;
            Integer restNum = totalNum;
            //随机数实例对象
            Random random = new Random();
            //迭代循环生成随机数直到个数为totalNum - 1
            for(int i = 0; i < totalNum -1; i ++) {
                //随机范围 [0, E)
                int amount = random.nextInt(restAmount/restNum * 2 - 1) + 1;
                //更新
                restAmount -= amount;
                restNum --;
                //产生的随机金额加入列表
                amountList.add(amount);
            }
            //还剩一个红包，该红包也是随机金额，加入即可
            amountList.add(restAmount);
        }
        return amountList;
    }
}
